home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2002 #11
/
Amiga Plus CD - 2002 - No. 11.iso
/
Tools
/
Development
/
PowerD
/
powerd
/
source
/
lib
/
powerd_lib.lha
/
PowerD_PPC
/
RealStr.ass
< prev
next >
Wrap
Text File
|
2002-03-17
|
4KB
|
224 lines
.text
.sdreg r2
.align 2
.global _RealStr
_RealStr:
###############################################################################
# name offset
# __local 0
# buf 4
# neg 28
# rest 32
# top 36
# d 40
# args ###########################
# str 48
# f 52
# n 60
mflr r0
stw r0,8(r1)
stwu r1,-92(r1)
stw r13,24(r1)
mr r13,r1
stw r3,48+28(r13)
stfd f1,52+28(r13)
stw r4,60+28(r13)
lwz r0,RealStr_laddr(r2)
stw r0,0+28(r13)
# DEFL top,rest,neg=FALSE
li r3,0
stw r3,28+28(r13)
# IF f<0 THEN neg:=TRUE
if0:
lfd f1,52+28(r13)
lfd f2,n0(r2)
fcmpo 0,f1,f2
blt $+12
li r3,0
b $+8
li r3,-1
mr. r3,r3
beq end0
# IF f<0 THEN neg:=TRUE
li r3,-1
stw r3,28+28(r13)
end0:
# d:=FAbs(f)
lfd f1,52+28(r13)
fabs f1,f1 # FAbs
stfd f1,40+28(r13)
# top:=d
lfd f0,40+28(r13)
fctiw f0,f0
stfd f0,-8(r1)
lwz r3,-4(r1)
stw r3,36+28(r13)
# d-=top
lfd f1,40+28(r13)
lwz r3,36+28(r13)
lis r0,17200
stw r0,-8(r1)
xoris r0,r3,0x8000
stw r0,-4(r1)
lfd f0,-8(r1)
lfd f2,conv(r2)
fsub f2,f0,f2
fsub f1,f1,f2
stfd f1,40+28(r13)
# top--
if2:
lfd f1,40+28(r13)
lfd f2,n1(r2)
fcmpo 0,f1,f2
blt $+12
li r3,0
b $+8
li r3,-1
mr. r3,r3
beq end2
# top--
lwz r3,36+28(r13)
subi r3,r3,1
stw r3,36+28(r13)
# d++
lfd f1,40+28(r13)
lfd f2,n2(r2)
fadd f1,f1,f2
stfd f1,40+28(r13)
end2:
# d*=1000000000
lfd f1,40+28(r13)
lfd f2,n3(r2)
fmul f1,f1,f2
stfd f1,40+28(r13)
# rest:=d
lfd f0,40+28(r13)
fctiw f0,f0
stfd f0,-8(r1)
lwz r3,-4(r1)
stw r3,32+28(r13)
# IF f<0 THEN top:=-top
if4:
lfd f1,52+28(r13)
lfd f2,n4(r2)
fcmpo 0,f1,f2
blt $+12
li r3,0
b $+8
li r3,-1
mr. r3,r3
beq end4
# IF f<0 THEN top:=-top
lwz r3,36+28(r13)
neg r3,r3
stw r3,36+28(r13)
end4:
# StringF(buf,'\s\d.\z\r\d[9]',IF neg THEN '-' ELSE NIL,Abs(top),rest)
subi r1,r1,12
addi r3,r13,4+28
stw r3,0+24(r1)
lwz r3,@_str0(r2)
stw r3,4+24(r1)
subi r1,r1,12
if6:
lwz r0,28+28(r13)
mr. r0,r0
beq elseif6_1
lwz r3,@_str1(r2)
stw r3,0+24(r1)
b end6
elseif6_1:
li r3,0
stw r3,0+24(r1)
end6:
lwz r3,36+28(r13)
bl _Abs # Abs
stw r3,4+24(r1)
lwz r3,32+28(r13)
stw r3,8+24(r1)
lwz r3,0+28(r13)
addi r3,r3,0
lwz r4,0+24(r1)
stw r4,0(r3)
lwz r4,4+24(r1)
stw r4,4(r3)
lwz r4,8+24(r1)
stw r4,8(r3)
addi r1,r1,12
stw r3,8+24(r1)
lwz r3,24(r1)
addi r1,r1,4
lwz r4,24(r1)
addi r1,r1,4
lwz r5,24(r1)
addi r1,r1,4
bl _StringF # StringF
# StrCopy(str,buf,StrLen(buf)-9+n)
lwz r3,48+28(r13)
addi r4,r13,4+28
stw r4,20(r1)
stw r3,16(r1)
subi r1,r1,8
addi r3,r13,4+28
bl _StrLen # StrLen
mr r5,r3
lwz r3,24(r1)
lwz r4,28(r1)
addi r1,r1,8
subi r5,r5,9
lwz r6,60+28(r13)
add r5,r5,r6
bl _StrCopy # StrCopy
RealStrend:
lwz r3,48+28(r13)
RealStrfinish:
lwz r13,24(r1)
addi r1,r1,92
lwz r0,8(r1)
mtlr r0
blr
.global _RealStr
.type _RealStr,2
.size _RealStr,$-_RealStr
RealStr_local:
RealStr_list0:
.ualong 0
.ualong 0
.ualong 0
.align 2
.global _StrCopy
.global _StringF
.global _StrLen
.global _Abs
.global _FAbs
.tocd
.global RealStr_laddr
RealStr_laddr: .long RealStr_local
.extern _stdrast_coloura
.extern _stdrast
.extern _exceptioninfo
.extern _exception
.extern _wbmessage
.extern _PowerPCBase
.extern _stdin
.extern _stdout
.extern _arg
.extern _GfxBase
.extern _IntuitionBase
.extern _DOSBase
.extern _ExecBase
.data
n0: .long 0x0 ,0x0
.set n1,n0
n2: .long 0x3FF00000,0x0
n3: .long 0x41CDCD65,0x0
.set n4,n1
conv: .long 0x43300000,0x80000000
.extern @_str0
.global str0
str0: .byte "%s%ld.%09.9ld",0
.extern @_str1
.global str1
str1: .byte "-",0